/**
 * @file read.h
 * @brief 电子书阅读器功能模块的头文件
 * @details 声明了用于显示文本、处理翻页和章节切换所需的数据结构和函数原型。
 * @version 1.0
 * @date 2025-07-05
 */

#ifndef _READ_H_
#define _READ_H_

#include <stdio.h> // 包含标准输入输出库，主要为了使用 FILE* 类型

// --- 宏定义 ---

/**
 * @brief 定义了小说章节的总数
 * @details 这个宏用于统一管理章节数量，便于在代码中（如数组大小、循环边界）一致地使用。
 */
#define NUM_CHAPTERS 18

// --- 外部变量声明 ---

/**
 * @brief 外部声明：一个存储所有章节文件名的全局常量指针数组。
 * @details `extern` 关键字告诉编译器，这个变量的实体（定义和初始化）在其他
 * 的 .c 文件中。任何包含了此头文件的代码都可以访问这个数组，
 * 以获取章节文件的路径。
 */
extern const char *chapters[NUM_CHAPTERS];

// --- 函数原型声明 ---

/**
 * @brief 显示指定的文本文件内容，并处理用户交互（如翻页）。
 * @details 这个函数是电子书阅读器的入口，负责打开文件、初始化显示，
 * 并进入一个循环来响应用户的触摸屏输入。
 * @param filename 要显示的文本文件的完整路径。
 * @param fd_ts 已打开的触摸屏设备的文件描述符，用于读取用户输入。
 */
void show_txt(char *filename, int fd_ts);

/**
 * @brief 从打开的文件中读取并显示一页内容。
 * @details 该函数从文件指针的当前位置开始，读取并格式化刚好能填满一页屏幕的文本。
 * @param fp 一个已经打开并定位好的文件指针。
 * @return int 函数的返回值可以用来表示状态，例如：
 * - 0: 成功显示一页
 * - 1: 已经到达文件末尾 (EOF)
 * - -1: 发生错误
 */
int show_page(FILE *fp);

#endif // _READ_H_